<?php
error_reporting(E_ALL); // Выводит все ошибки PHP
if (!defined('IN_SCRIPT')) {define('IN_SCRIPT',1);}

define('DS', DIRECTORY_SEPARATOR);
define('REAL_PATH_DIR', realpath(dirname(__FILE__)));

// Хрень какая-то
set_magic_quotes_runtime(0);
ini_set('magic_quotes_sybase',0);
if (get_magic_quotes_gpc()) {
    define('QUOTES_ENABLED', true);}
ini_set('session.bug_compat_42', 1);
ini_set('session.bug_compat_warn', 0);
                   
//
// Strip tags from any type variable 
//
function fn_strip_tags(&$var)
{
    global $trusted_variables;

    if (!is_array($var)) {
        return(strip_tags($var));
    } else {
        $stripped = array();
        foreach ($var as $k => $v) {
            $sk = strip_tags($k);
            if (!is_array($v)) {
                    $sv = strip_tags($v);
            } else {
                $sv = fn_strip_tags($v);
            }
            $stripped[$sk] = $sv;
        }
        return($stripped);
    }
}

//
// Add slashes to any type variable 
//
function fn_add_slashes(&$var, $escape_nls = false)
{
    if (!is_array($var)) {
        return ($escape_nls == true) ? str_replace("\n", "\\n", addslashes($var)) : addslashes($var);
    } else {
        $slashed = array();
        foreach ($var as $k => $v) {
            $sk = addslashes($k);
            if (!is_array($v)) {
                $sv = ($escape_nls == true) ? str_replace("\n", "\\n", addslashes($v)) : addslashes($v);
            } else {
                $sv = fn_add_slashes($v, $escape_nls);
            }
            $slashed[$sk] = $sv;
        }
        return($slashed);
    }
}

//
// Extract superglobals to global scope
// Warning! The order of variables should be by importance (get, post, cookie, etc...)
function fn_process_superglobals()
{
    foreach (func_get_args() as $var) {
        foreach ($var as $k => $v) {
            $var = fn_strip_tags($v);
            if (!defined('QUOTES_ENABLED')) {
                $var = fn_add_slashes($var);
            }
            $GLOBALS[$k] = $var;
        }
    }
}

fn_process_superglobals($_GET, $_POST, $_COOKIE, $_SERVER);
                                
if (!empty($QUERY_STRING)) { 
    $QUERY_STRING = (defined('QUOTES_ENABLED')) ? stripslashes($QUERY_STRING) : $QUERY_STRING;
    $QUERY_STRING = str_replace(array('"',"'"), array('',''), $QUERY_STRING);
}                                
    
// INIT
session_start();


require_once(REAL_PATH_DIR .DS. 'config.php');                      // конфигурация      
require_once(REAL_PATH_DIR .DS. INCLUDE_DIR. DS. 'mysql.php');      // подключение к БД  
require_once(REAL_PATH_DIR.DS.INCLUDE_DIR.DS."functions.php");      // Основные функции
require_once(REAL_PATH_DIR.DS.INCLUDE_DIR.DS."mailer.php");      // Отправка почты
require(REAL_PATH_DIR.DS.INCLUDE_DIR.DS.'smarty'.DS.'Smarty.class.php');    // подключение SMARTY 
       
        
// Определение языка пользователя
if (isset($lng) && $lng != '')
    $_SESSION['language'] = $lng;
if (isset($_SESSION['language']) && $_SESSION['language'] != '' && file_exists(REAL_PATH_DIR.DS.LANG_DIR.DS."lang_".$_SESSION['language'].".php")) 
    $language =  $_SESSION['language'];
else {
    $language = define_language();
    if($language == '' || !file_exists(REAL_PATH_DIR.DS.LANG_DIR.DS."lang_$language.php"))
        $language = $default_language; 
}
$_SESSION['language'] = $language;
require_once(REAL_PATH_DIR.DS.LANG_DIR.DS."lang_$language.php");      // Языковые переменные
setlocale(LC_TIME, explode(',', $language_list[$language]['locales'] ));  // для вывода дат в локальном формате

define('TEMPLATES_DIR', REAL_PATH_DIR.DS.SKINS_DIR.DS.$skin_name.DS.'templates'.DS);   
class Smarty_Master extends Smarty {
   function Smarty_Master()
   {
      #  global $skin_name;
        // Конструктор класса.
        // Он автоматически вызывается при создании нового экземпляра.
        $this->Smarty();
        $this->template_dir = TEMPLATES_DIR;
        $this->compile_dir  = REAL_PATH_DIR.DS.STUFF_DIR.DS.'compile'.DS;
        $this->config_dir   = REAL_PATH_DIR.DS.STUFF_DIR.DS.'configs'.DS;
        $this->cache_dir    = REAL_PATH_DIR.DS.STUFF_DIR.DS.'cache'.DS;

        $this->caching = false;
        $this->cache_lifetime = 3600;
      //  $this->debugging = true;
   }
}
$smarty = new Smarty_Master();


$place = isset($$place_name) ? $$place_name : '';
$mode = isset($$mode_name) ? $$mode_name : '';
$act = isset($$action_name) ? $$action_name : '';
$page = (isset($page) && is_numeric($page) && ((int)$page > 0)) ? (int)$page : 1;   

// определение количества выводимых объектов на страницу
if(isset($per_page) && isset($per_page_defs[$per_page]))
    $_SESSION["items_per_page"] = $per_page;
if(isset($_SESSION["items_per_page"]))
    $pp_def = $_SESSION["items_per_page"];
else
    $pp_def = 'a';
$per_page = $per_page_defs[$pp_def];

// Очистка кеша шаблонов
if (isset($cleanup_cache)) {
    fn_log("Очистка кэша.");
    echo $lang['cleanup_templates']; 
    echo ( fn_rm($smarty->cache_dir, false)? "<b style='color: green;'>OK</b>" : "<b style='color: red;'>FAILED</b>");
    echo '<br>'.$lang['cleanup_compiler']; 
    echo ( fn_rm($smarty->compile_dir, false)? "<b style='color: green;'>OK</b>" : "<b style='color: red;'>FAILED</b>");
    die("<br><b>DONE</b><br><br><a href=\"$current_location\">$lang[home_lnk]</a>");
}

connectToDB(); // Подключаемся к БД

// Записываем в куки уникальный номер сессии, если его там еще нет
if(empty($_COOKIE['gfts_m']) || !preg_match("/[0-9a-z\.]/i", $_COOKIE['gfts_m'])) {
    $uniq_session = uniqid( rand(), true);
    setcookie('gfts_m', $uniq_session, time() + 60*60*24*365);
} else
    $uniq_session = $_COOKIE['gfts_m'];

// убиваем сессию, если пользователь долгое время неактивен
if(isset($_SESSION['last_visit']) && (microtime(true)- $_SESSION['last_visit'] > $session_time))
    flushMemberSession();
if(isset($_SESSION['id'])) {
    db_query("UPDATE `users` SET `last_visit`=UTC_TIMESTAMP() WHERE `idusers`=".$_SESSION['id']);
    $_SESSION['last_visit'] = microtime(true);
}

// статистика сайта
$overall_stats = get_overall_stats();

// определяем пользователя, чья страница будет выводиться
$current_user_info = get_user_info();
if(!empty($current_user_info['idusers'])) {
    $current_user = $current_user_info['idusers'];
    $current_user_info['first_name_short'] = ShortenText($current_user_info['first_name'], 30, false);
} elseif (!empty($_SESSION['id']))
    $current_user = $_SESSION['id'];
else
    $current_user = false;

// определяем ссылку на текущую отображаемую страницу
$current_place = '';
if($place != '' or $current_user !== false) {
    $current_place = ($current_user ? '?id='.$current_user : '');
    if(!empty($place))
        $current_place .= (empty($current_place) ? '?' : '&').$place_name.'='.$place.(empty($mode) ? '' : '&'.$mode_name.'='.$mode);
}

// определяем смещение часового пояса пользователя относительно GMT
$current_time_offset = isset($_SESSION['time_offset']) ? $_SESSION['time_offset'] : (isset($_COOKIE['time_offset']) ? $_COOKIE['time_offset'] : $default_time_offset);

define('LOGGED_IN', isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']);
// если своя страница - можно редактировать
define('CAN_EDIT', LOGGED_IN && ($_SESSION['id'] == $current_user));

// определяем подарок, который был в запросе, и его параметры
$current_gift = get_gifts();
                                                         
// загрузка настроек пользователя
$user_settings = fn_load_settings();
                          
// определение дефолтного шаблона. для запросов AJAX - отдельный шаблон.
$default_template = get_param('ajax') == 'yes' ? 'ajax_empty.tpl' : 'index.tpl';

$smarty->assign('index_script', $index_script);
$smarty->assign('place_name', $place_name);
$smarty->assign('place', $place);
$smarty->assign('mode_name', $mode_name);
$smarty->assign('mode', $mode);
$smarty->assign('current_place', $current_place);
#$smarty->assign('action_name', $action_name);
$smarty->assign('form_method', $form_method);
$smarty->assign('current_location', $current_location);
$smarty->assign('per_page_defs', $per_page_defs);
$smarty->assign('page', $page);
$smarty->assign('per_page', $pp_def);

$ll = array();
foreach($language_list as $l => $v) 
    $ll[$v['translation']] = $language_list[$v['translation']]['name'];
$smarty->assign('language_list', $ll);
$smarty->assign('charset', $lang_charset);
$smarty->assign('current_user', $current_user);
$smarty->assign('loggedin_user', isset($_SESSION['id']) ? $_SESSION['id'] : false);
$smarty->assign('current_user_info', $current_user_info);
$smarty->assign('current_gift', $current_gift);
$smarty->assign('user_settings', $user_settings);
$smarty->assign('overall_stats', $overall_stats);
if($current_gift !== false) {
    $smarty->assign('present_id', $current_gift['idpresents']);
    $smarty->assign('present_userid', $current_gift['user']);
}                                         

$smarty->assign('images_dir', $main_host_dir.'/'.IMAGES_DIR);
$smarty->assign('gift_images_dir', $main_host_dir.'/'.GIFT_IMAGES_DIR);
$smarty->assign('scripts_dir', $main_host_dir.'/'.INCLUDE_DIR.'/scripts');

$smarty->assign('skin_dir', $main_host_dir.'/'.SKINS_DIR.'/'.$skin_name);
$smarty->assign('templates_dir', $main_host_dir.'/'.SKINS_DIR.'/'.$skin_name.'/templates');
$smarty->assign('skin_images_dir', $main_host_dir.'/'.SKINS_DIR.'/'.$skin_name.'/images');

/*                                                    
$smarty->assign('thumb_width', $thumb_width); 
$smarty->assign('thumb_height', $thumb_height); 
$smarty->assign('image_handling_file', $image_handling_file); 
*/
?>
